home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / cleo.lzh / Cleo / inter / include / inter.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-24  |  7.2 KB  |  230 lines

  1. /***************************************************************************
  2. *   Ce fichier, ainsi que tous les  modules  l'accompagnant, peut et  doit *
  3. * etre  copié GRATUITEMENT à la seule condition expresse de conserver      *
  4. * l'INTEGRALITE  du  Code Source, de  la documentation, et  des fichiers   *
  5. * annexes du package. Ce logiciel est Shareware, veuilez envoyer 100 FF à  *
  6. * l'auteur pour recevoir regulièrement les nouvelles versions.             *
  7. * Toute modification est INTERDITE sans l'autorisation écrite de l'auteur. *
  8. *            Tous droits réservés à M. DIALLO Barrou, Juillet 1992.        *
  9. ***************************************************************************/
  10.  
  11. #include <stdio.h>
  12. #include <math.h>
  13. #ifdef msdos
  14.    #include "include\\prot.h"
  15. #else
  16.    #include "include/prot.h"
  17. #endif
  18.  
  19. #define VERSION 0        /* Version actuelle de Cleobis    */
  20. #define SUBVERSION 1
  21. #define NAME "cleo"             /* Nom de la Version */
  22. #ifdef msdos
  23.         #define DEFAULT_OUT "cleobin\\cleo.out"   /* Nom du file dest par defaut */
  24.         #define CONFIGFILE "etc\\cleo_int.cfg"
  25. #else
  26.         #define DEFAULT_OUT "cleobin/cleo.out"   /* Nom du file dest par defaut */
  27.         #define CONFIGFILE "etc/cleo_int.cfg"
  28. #endif
  29.  
  30. #define MAXSTRING 256           /* Taille maximum d'une chaine Cleobis */
  31.  
  32. #define SECTDATA "Data Section"
  33. #define SECTCODE "Code Section"
  34. #define SECTLIB "Lib Section"
  35.  
  36. /* Variables de compilation */
  37.  
  38. #define RUNNING 0
  39. #define TRACING 1
  40.  
  41. /*  Redefinition de types */
  42.  
  43. #define UC unsigned char
  44. #define UL unsigned long
  45.  
  46. /*********** declaration des types Pointxd ******/
  47.  
  48. typedef struct {    double x,y,z;    } Point3d;
  49. typedef struct {    double x,y;      } Point2d;
  50. typedef struct {    UC r,g,b;      } Rgb;
  51.  
  52. typedef struct fctlib{
  53.     int node;       /* Noeud de la library à laquelle elle appartient */
  54.     int id;         /* Id de cette fct */
  55.     int retype;     /* Type de la valeur de retour */
  56.     int nbarg;      /* Nbre d'arg */
  57.     int *type;      /* Tableau sur les type des args */
  58.     } EXTLIB;
  59.  
  60.  
  61. typedef struct {
  62.        int operande;
  63.        int code;
  64.         } PRG;
  65.  
  66. typedef struct
  67.      {
  68.         struct {
  69.             int borne1, borne2;
  70.             int type;
  71.          } tab;
  72.         union {
  73.             long   *buf_int;
  74.             double *buf_real;
  75.             char   *buf_char;
  76.             unsigned char   *buf_bool;
  77.             Point2d *buf_p2d;
  78.             Point3d *buf_p3d;
  79.             Rgb     *buf_rgb;
  80.             } buf;
  81.      } TAB;
  82.  
  83. typedef enum { integer_t =200, real_t, string_t, char_t, const_t,
  84.                boolean_t, array_t, longint_t, longreal_t,
  85.                point2d_t, point3d_t, rgb_t,            /* file_t, */
  86.                fin_t
  87.              } VarTypes;
  88.                                     /* _adr : adresse de variables
  89.                                        _cadr: adresse de constantes */
  90. typedef enum { integer_adr=50 , real_adr, string_adr, char_adr,
  91.                boolean_adr, array_adr, longint_adr, longreal_adr,
  92.                char_cadr, integer_cadr, real_cadr, string_cadr,
  93.                point2d_adr, point3d_adr, rgb_adr,
  94.                fin_adr
  95.              } ADRTYPES;         /* Type de l'adr en pile */
  96.  
  97.  
  98. typedef struct {
  99.                 int type;            /* enum VarTypes */
  100.                 double val;
  101.                 } MY_CONST;
  102.  
  103. /************** Code des Mnémoniques ******************/
  104.  
  105. typedef enum {
  106.  RTS  =2000,
  107.  PADR_CHR , /* Push Adr N; ajoute l'adr de la variable N sur la pile */
  108.  PADR_INT,
  109.  PADR_LINT,
  110.  PADR_REAL,
  111.  PADR_LREAL,
  112.  PADR_STR,
  113.  PADR_BOOL,
  114.  PADR_ARRAY,
  115.  
  116.  PVAL_CHR    ,   /* Push Val N; Met la val de la Const Chr N dans la pile   */
  117.  PVAL_INT    ,   /* Push Val N; Met la val de la Const Int N dans la pile   */
  118.  PVAL_REAL    ,  /* Push Val N; Met la val de la Const Real N dans la pile   */
  119.  PVAL_STR    ,   /* Push Val N; Met l'ADRESSE de la Const String N dans la pile   */
  120.  
  121.  PMEM_CHR    ,   /* Push Memory; charge la valeur de la var
  122.                                                   dont l'adr est au sommet de la pile  */
  123.  PMEM_INT,
  124.  PMEM_LINT,
  125.  PMEM_REAL,
  126.  PMEM_LREAL,
  127.  PMEM_STR,
  128.  PMEM_BOOL,
  129.  PMEM_ARRAY,
  130.  
  131.  STM_CHR,      /* Pop valeur dans la variable dont l'adr est
  132.                                                 a l'avant derniere pos de la pile */
  133.  STM_INT,
  134.  STM_LINT,
  135.  STM_REAL,
  136.  STM_LREAL,
  137.  STM_STR,
  138.  STM_BOOL,
  139.  STM_ARRAY,
  140.  
  141.  DIVS  ,     /************ Operations sur les Valeurs du ********/
  142.  MULS ,      /*            sommet de la pile                    */
  143.  ADD  ,      /*              /, *, +, -, *-1                    */
  144.  SUB  ,      /*                                                 */
  145.  NEG  ,      /***************************************************/
  146.  
  147.  EQU  ,          /* =    */
  148.  LT  ,           /* <    */
  149.  GT  ,           /* >    */
  150.  LE  ,           /* <=   */
  151.  GE  ,           /* >=   */
  152.  NE,             /* <>   */
  153.  AND,
  154.  OR,
  155.  XOR,
  156.  NOT,
  157.  IN,
  158.  
  159.  EQU_STR  ,         /* =    */
  160.  LT_STR  ,          /* <    */
  161.  GT_STR  ,          /* >    */
  162.  LE_STR  ,          /* <=   */
  163.  GE_STR  ,          /* >=   */
  164.  
  165.  ORG,              /*  Adresse courante */
  166.  BNE ,      /* N, va à l'adr N si Condition en Fin de pile = 0 =FAUX */
  167.  BRA ,      /* N, Saut sans condition a l'adr N */
  168.  
  169.  PRSTR   ,    /* Affiche la chaine const dont l'adr est au sommet de la pile */
  170.  PRVSTR   ,    /* Affiche la chaine var dont l'adr est au sommet de la pile */
  171.  PRCHR,
  172.  PRINT  ,     /*            l'Entier  ou le Real...*/
  173.  PRINTCHR,
  174.  CHR13  ,     /* Passe a la ligne */
  175.  READ,
  176.  
  177.  ABS, ATAN, ACOS, ASIN, COSH, SINH, COS, SIN, EXP, FRAC, INT, LN, SQR, SQRT,
  178.  
  179. LOADORG,
  180. PADR_P2D, PMEM_P2D, STM_P2D,
  181. PADR_P3D, PMEM_P3D, STM_P3D,
  182. PUSHVAL,     /* Met une valeur sur la pile */
  183. PMEM_P2D_ALL, PMEM_P3D_ALL,         /* empile tous les champs */
  184. ODD, EVEN, PRED, SUCC, INV, RND, TANH, TAN,
  185. PADR_RGB, PMEM_RGB, STM_RGB, PMEM_RGB_ALL,
  186. MOD, DIV,
  187. LIBRARY
  188.     } MNEMOS;
  189.  
  190. /********** Entete et fichier P-Code **************/
  191.  
  192. typedef struct {
  193.         char magic[30];         /* Chr de reconnaissance */
  194.         long codesize;          /* Taille du Code */
  195.         int nbrefctlib;         /* Nbre de fct library */
  196.  
  197.         int string;             /* Nbre de constantes Chaines */
  198.         int integer;            /* Nbre de constantes Entier */
  199.         int real;               /* Nbre de constantes real */
  200.         int Char;               /* Nbre de constantes Char */
  201.  
  202.         int Vstring;             /* Nbre de Variables Chaines */
  203.         int Varray;              /* Nbre de Variables Array */
  204.         int Vinteger;            /* Nbre de Variables Entier */
  205.         int Vlongint;            /* Nbre de Variables Entier long*/
  206.         int Vreal;               /* Nbre de Variables real */
  207.         int Vlongreal;           /* Nbre de Variables longreal */
  208.         int Vchar;               /* Nbre de Variables Char */
  209.         int Vboolean;            /* Nbre de Variables booleen */
  210.  
  211.         int Vpoint3d;            /* Nbre de Variables point3d */
  212.         int Vpoint2d;            /* Nbre de Variables point2d */
  213.         int Vrgb;                /* Nbre de Variables rgb */
  214.         int Vsuite;              /* Nbre de Variables Suite */
  215.  
  216.    } Entete;
  217.  
  218. typedef struct {
  219.             char *msg;
  220.             int num;
  221.             } Erreur;
  222.  
  223. typedef enum {
  224.     STACKOVER, STACKUNDER,UNKNOW
  225. } ERRNUM;
  226.  
  227.  
  228. #ifndef unix
  229.     #define cfree free
  230. #endif